草庐IT

c++ - RAII 和 C++ STL

全部标签

c++ - 所有的 STL 容器都通过引用返回它们的元素吗?

最近在学习STL,想知道STL容器是不是returnbyreference?例如:vector.first();map[key];*vector.begin();Oranypossiblereturnthatendswithelement(orvaluetype)ofcontainer例如:std::vectorelements;elements.push_back(20);elements[0]=60;//thiswillalsochangethevalueelements.front()=23;//eventhefunctionsalsobehavesamewaylikesubsc

c++ - 是否有可能阻止 RAII 样式类被实例化 "anonymously"?

假设我有一个RAII风格的C++类:classStateSaver{public:StateSaver(inti){saveState();}~StateSaver(){restoreState();}};...在我的代码中这样使用:voidManipulate(){StateSaversave(1);//...dostuffthatmodifiesstate}...目标是进入某种状态,做一些事情,然后在我离开该范围时离开该状态。有没有办法让这个拼写错误无法编译(或警告,或以某种方式提示以便可以注意到错误)?voidManipulate(){StateSaver(1);//ruh-ro

c++ - 编写 STL 兼容的迭代器

我正在尝试转换一个迭代器类,我必须与STL兼容,以便它可以与STL算法一起使用。在下面的简单(坦率地说无用)示例中,它应该打印0到5的值,包括在内,我收到以下错误,ISOC++禁止递增“Iterator(*)()”类型的指针和,从“Iterator(*)()”到“int”的无效转换我做错了什么?谢谢。#include#include#includeclassIterator:publicstd::iterator{public:Iterator(inti=0):val(i){if(val5)throw;}booloperator==(Iteratorconst&rhs)const{re

【C++干货铺】STL简述 | string类的使用指南

=========================================================================个人主页点击直达:小白不是程序媛C++系列专栏:C++干货铺代码仓库:Gitee=========================================================================目录什么是STLSTL的版本STL的六大组件STL的缺陷string类C语言中的字符串标准库中的string类string类常用的接口使用指南string类中常见的构造string类对象的访问及遍历操作string类对象的容量操

c++ - 如何使用RAII获取类资源?

有一个例子表明以这种方式使用RAII:classFile_ptr{//...File*p;int*i;public:File_ptr(constchar*n,constchar*s){i=newint[100];p=fopen(n,a);//imaginefopenmightthrows}~File_ptr(){fclose(p);}}voiduse_file(constchar*fn){File_ptr(fn,"r");}是安全的。但我的问题是:如果在p=fopen(n,a);中抛出异常怎么办,那么分配给i的内存不会返回。假设RAII告诉您,然后每次您希望X安全时,X获取的所有资源都

c++ - STL 设置交集和输出

我有一个这样的代码片段,要在VC++2010下编译。std::sets1;std::sets2;std::setres_set;std::set_intersection(s1.begin(),s1.end(),s2.begin(),s2.end(),res_set.begin());据我所知,这应该有效。但是,我收到构建错误:c:\programfiles(x86)\microsoftvisualstudio10.0\vc\include\algorithm(4494):errorC3892:'std::_Tree_const_iterator::operator*':youcann

c++ - 了解 STL 中的迭代器

C++STL中的迭代器到底是什么?就我而言,我使用的是list,而且我不明白为什么你必须制作一个迭代器std::list::const_iteratoriElementLocator;通过取消引用运算符显示列表的内容:cout在将其分配给可能list.begin()之后.请解释迭代器到底是什么,以及为什么我必须取消引用或使用它。 最佳答案 STL中包含三个构建block:容器算法迭代器在概念层面上,容器保存数据。这本身并不是很有用,因为您想对数据做一些事情;您想要对其操作、操纵它、查询它、玩弄它。算法正是这样做的。但是算法不保存数据

c++ - 从 STL std::queue 中删除而不破坏已删除的对象?

我能在STL容器(队列和列表)上找到的所有文档都说,对于任何删除函数,都会调用已删除对象的析构函数。这意味着我无法在任何时候使用std::queue来获得一个队列,该队列只是一个需要对其执行某些操作的对象列表。我希望能够在他们排队等待我对他们做某事时将他们添加到队列中。然后我想在完成处理后将它们从中删除,而不破坏相关对象。从我读过的文档来看,这似乎是不可能的。我误读了文档吗?除了基本的“队列”之外,STL中是否还有其他类型的队列在调用pop_front时不调用已删除对象的析构函数?编辑澄清:在我的例子中,我使用的是指针列表。像这样:dbObject*someObject;queuein

c++ - 如何从字符串末尾提取数字

给定如下字符串:sdfsd34sdfdsf1我想提取:34,1使用c++(STL但没有提升),c。谢谢 最佳答案 您正在搜索函数string.find_last_not_of:stringstr="sdfsd34";size_tlast_index=str.find_last_not_of("0123456789");stringresult=str.substr(last_index+1); 关于c++-如何从字符串末尾提取数字,我们在StackOverflow上找到一个类似的问题:

c++ - C++ 中模板和 STL 的缺点

关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭9年前。Improvethisquestion使用STL或模板有什么缺点吗?是否有不适合的情况。